#!/bin/sh

. $LKP_SRC/lib/reproduce-log.sh
. $LKP_SRC/lib/upload.sh
. $LKP_SRC/lib/wait.sh

gcc_process()
{
  data_dir=/sys/kernel/debug/gcov

  if [[ ! -d ${data_dir} ]]; then
    echo "[ERROR] GCOV data directory ${data_dir} does not exist."
    exit 1
  fi

  echo 1 > ${data_dir}/reset

  setup_wait
  wait_post_test

  temp_dir=$(mktemp -d)

  echo "[INFO] Start collecting the profiles." | tee -a ${log_file}
  find ${data_dir} -type d -exec mkdir -p ${temp_dir}/\{\} \;
  find ${data_dir} -name '*.gcda' -exec sh -c 'cat < $0 > '${temp_dir}'/$0' {} \;
  find ${data_dir} -name '*.gcno' -exec sh -c 'cp -d $0 '${temp_dir}'/$0' {} \;

  pwd

  echo "[INFO] Start post-processing the profiles."
  find ${temp_dir} -name '*.gcda' >list.txt
  /usr/bin/g++ $LKP_SRC/tests/GcovSummaryAddTool.cpp -o calcsum
  ./calcsum list.txt
  rm -f list.txt

  profile_dir=/gcovdata
  rm -rf ${profile_dir}
  mkdir ${profile_dir}
  for file in $(find ${temp_dir} -name '*.gcda'); do
    hash_path=$(echo ${file//\//\#})
    name=$(echo ${hash_path#*gcov})
    mv $file ${profile_dir}/$name
  done
  rm -rf ${temp_dir}

  mkdir -p $TMP_RESULT_ROOT/results
  tar -czf $TMP_RESULT_ROOT/results/gcovdata.tar.gz ${profile_dir}

  echo "[INFO] Finished process profiles."
}

gcc_process
